#include <iostream>
#include <string>
#include <map>
#include <typeinfo>
//using std::cout;
//using std::endl;//将常用的库或对象展出来
//using std::string;
using namespace std;
//C++基础
// int main(){
//     //自动识别类型
//     cout<<sizeof(int)<<endl;
//     cout<<"hello"<<endl;
//     double d = 3.14;
//     cout<<d<<endl;
//     return 0;
// }

//缺省参数
// void Print1(int a = 5, int b = 10){
//     if(a == 5 && b == 10) cout<<"全缺省"<<endl;
//     cout<<"a:"<<a<<",b:"<<b<<endl;
// }

// void Print2(int a, int b = 10){
//     if(b == 10) cout<<"半缺省"<<endl;
//     cout<<"a:"<<a<<",b:"<<b<<endl;
// }

// int main(){
//     //调用时，如果要传参必须从左往右传参，不能空缺
//     Print1();
//     Print1(2);
//     Print2(10);
//     return 0;
// }

//函数重载——函数名相同，参数不同（类型 or 个数 or 顺序）
// int Add(int num1, int num2){
//     return num1 + num2;
// }

// string Add(string& str1, string& str2){
//     string str3 = str1 + str2;
//     return str3; 
// }

// int main(){
//     cout<<"函数重载"<<endl;
//     cout<<Add(3,5)<<endl;
//     string s1 = "hello";
//     string s2 = "world";
//     cout<<Add(s1, s2)<<endl;
//     return 0;
// }

//auto与范围for
int main(){
    int a = 0;
    auto b = a;
    char c = 'a';
    auto& d = c;
    double f = 3.14;
    string s = "hello";
    cout << typeid(a).name()<<endl;
    cout << typeid(b).name()<<endl;
    cout << typeid(c).name()<<endl;
    cout << typeid(d).name()<<endl;
    cout << typeid(f).name()<<endl;
    cout << typeid(s).name()<<endl;

    //auto最有用的地方
    std::map<std::string, std::string> dict;
    std::map<std::string, std::string>::iterator it1 = dict.begin();
    auto it2 = dict.begin();//使用auto优化

    //范围for
    int arr[] = {1, 2, 3, 4, 5};
    for(auto& e : arr){
        e *= 2;
    }
    for(auto& e : arr){
        cout << e <<" ";
    }
    return 0;
}